#include<iostream>
#include<string>
#include<vector>
#include<memory>
using namespace std;
void practice_13_13();
struct X{
	X(){cout<<"X()"<<endl;}
	X(const X&){cout<<"X(const X&)"<<endl;}
	X& operator=(const X&);
	~X();
};
void f(X &tmp);
class Employee{
public:
	Employee(const string &s):name(s){this->num=++count;}
	Employee(string s=""):name(s){this->num=++count;}
	Employee(const Employee&);
	Employee &operator=(const Employee&);
private:
	string name;
	int num;
	static int count;
};
int Employee::count=0;
Employee::Employee(const Employee &employ)
{
	this->name=employ.name;
	this->num=++count;
}
Employee& Employee::operator=(const Employee &employ)
{
	this->name=employ.name;
	this->num=++count;
	*this;
}
X& X::operator=(const X &x)
{
	cout<<"operator=(const X &x)"<<endl;
	return *this;
}
X::~X()
{
	cout<<"~X()"<<endl;
}
int main()
{
	practice_13_13();
	return 0;
}
void f(X &tmp)
{
	X x=tmp;
	vector<X> v{x};
}
void practice_13_13()
{
	X x;
	shared_ptr<X> x1=make_shared<X>();
	X x2(*x1);
	f(*x1);
	X x3=x;
	f(x);
}